// 引入依赖的配置文件模块
require(["config"], function(){
	// 引入依赖模块
	require(["jquery","template", "header", "cookie"], function($, template){
		function Cart(){
			this.products = null; // 保存购物车的商品数组结构
			this.load();
			this.addListener();
		}

		Cart.prototype = {
			constructor: Cart,
			// 加载，渲染页面，如果有选购的购物车商品，
			// 则显示商品信息，如果没有，则显示空的提示
			load: function() {
				// 配置 cookie 插件自动转换 JS 与 JSON
				$.cookie.json = true;
				// 读取cookie中保存的购物车
				var products = this.products = $.cookie("cart") || [];
				console.log(products);
				var cartnum = products.length;
				console.log(cartnum);
				$(".header_main_top_3").find(".cartnum").html(cartnum);
				console.log($("#cartnum"));
				//$(".cartnum").innerHTML = "cartnum";
				
				// 判断是否有购物车商品
				if (products.length === 0) { // 购物车为空
					$(".empty").show().siblings(".not-empty").hide();
					return;
				}
				// 购物车非空
				$(".empty").hide().siblings(".not-empty").removeClass("hidden");
				// 渲染模板
				var data = {products: products}
				var html = template("cart-body-template", data);
				$(".cart-table tbody").html(html);
			},

			// 注册事件监听
			addListener: function() {
				// 删除
				$(".cart-table tbody").on("click", ".del", $.proxy(this.delHandler, this))
				// +/-数量
				$(".cart-table tbody").on("click", ".jian,.jia", $.proxy(this.decIncHandler, this))
				// 输入修改数量
				$(".cart-table tbody").on("blur", ".amount", $.proxy(this.inputHandler, this));
				// 全选
				$(".ck_all").on("click", $.proxy(this.ckAllHandler, this));
				// 部分选中
				$(".cart-table tbody").on("click", ".ck_prod", $.proxy(this.ckProdHandler, this));
			},
			// 删除单行
			delHandler: function(event) {
				// 获取事件源元素(DOM元素)
				var src = event.target;
				// 获取事件源元素所在行(jQuery对象)
				var tr = $(src).parents("tr");
				// 获取商品 id
				var id = tr.find(".id").text();
				// 从数组中删除该 id 对应的商品对象
				this.products = this.products.filter(function(prod) {
					return !(prod.id == id);
					/*if (prod.id == id)
						return false;
					return true;*/
				});
				// this.products = this.products.filter(prod => !(prod.id == id));

				// 从 cookie 中保存的购物车结构中删除商品数据
				$.cookie("cart", this.products, {expires: 10, path: "/"});
				// 从 DOM 树中删除 DOM 行结构
				tr.remove();

				// 计算合计
				this.calcTotal();

				// 判断是否有购物车商品
				if (this.products.length === 0) { // 购物车为空
					$(".empty").show().siblings(".not-empty").hide();
				}
			},
			// +/-数量处理
			decIncHandler: function(event) {
				// 事件源元素（DOM）
				var src = event.target;
				// 事件源元素所在行(jQuery对象)
				var tr = $(src).parents("tr");
				// 商品 id
				var id = tr.find(".id").text();
				// 商品对象
				var product = this.products.filter(function(prod) {
					return prod.id == id;
					/*if (prod.id == id)
						return true;
					return false;*/
				})[0];
				// +/-数量
				if ($(src).is(".jian")) { // -
					if (product.amount <= 1)
						return;
					product.amount--;
				} else { // +
					product.amount++;
				}
				// 保存到 cookie 中（修改数量后的数组）
				$.cookie("cart", this.products, {expires:10, path:"/"});

				// 页面渲染
				tr.find(".amount").val(product.amount);
				tr.find(".sub").text(product.amount*product.price);

				// 计算合计
				this.calcTotal();
			},
			// 输入数量处理
			inputHandler: function(event) {
				// 事件源
				var src = event.target;
				// 所在行
				var tr = $(src).parents("tr");
				// 商品 id
				var id = tr.find(".id").text();
				// 商品对象
				var product = this.products.filter(prod=>prod.id == id)[0];
				// 修改数量
				var _amount = $(src).val();
				var reg = /^[1-9]\d*$/;
				if (!reg.test(_amount)) { // 格式有误，则还原为原有数量值
					$(src).val(product.amount);
					return;
				}
				product.amount = _amount;
				// 保存回 cookie 中
				$.cookie("cart", this.products, {expires:10, path:"/"});
				// 显示小计
				tr.find(".sub").text(product.amount * product.price);

				// 计算合计
				this.calcTotal();
			},
			// 全选处理
			ckAllHandler: function(event) {
				// 获取全选复选框的选中状态
				// checked、selected、disabled这些属性通常使用 .prop() 方法来获取或设置
				// var status = $(event.target).attr("checked") // element.getAttribute("checked")
				// console.log(status);
				var status = $(event.target).prop("checked") // element.checked
				console.log(status);
				// 将各商品行前复选框选中状态设置为全选的选中状态
				$(".ck_prod").prop("checked", status);

				// 计算合计
				this.calcTotal();
			},
			// 部分选中处理
			ckProdHandler: function(event) {
				// 获取购物车主体中选中的复选框个数
				var count = $(".ck_prod:checked").length;
				// 设置全选复选框选中状态
				var status = count === this.products.length;
				$(".ck_all").prop("checked", status);

				// 计算合计
				this.calcTotal();
			},
			// 计算合计金额
			calcTotal: function() {
				// 将选中行中的小计金额累加
				var sum = 0;
				// 选中行中的复选框
				$(".ck_prod:checked").each(function(index, element) {
					// console.log(index, element, this, element == this);
					sum += Number($(this).parents("tr").find(".sub").text());
				});
				console.log("sum");
				// 显示
				$(".total").text(sum);
			}

		}

		new Cart();
	});
});